﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SanFranciscoModel.Curso;
using SanFranciscoModel.Intermedias;
using SanFranciscoModel.Horarios;


namespace SanFranciscoModel.Curso
{
    public class CursoManager
    {

        public List<CursoXMateriaXDocente> getCursoXMateriaXDocenteByIDCursoIDMateria(int idCurso, int idDocente)
        {
            List<CursoXMateriaXDocente> CursoXMateriaXDocenteList = new List<CursoXMateriaXDocente>();
            CursoXMateriaXDocenteDataContext db = new CursoXMateriaXDocenteDataContext();

            var objeto = from f in db.CursoXMateriaXDocentes
                         where f.IdCurso==idCurso
                         && f.IdDocente==idDocente
                         select f;
            foreach (var nombre in objeto)
            {
                CursoXMateriaXDocenteList.Add(nombre);
            }
            return CursoXMateriaXDocenteList;
        }

        //Metodo para devolver una lista de NombreCurso cargada
        public List<Curso> getNombreCurso()
        {
            List<Curso> CursoList = new List<Curso>();
            CursoDataContext db = new CursoDataContext();

            var objeto = from nombrecurso in db.Cursos
                         select nombrecurso;
            foreach (var nombre in objeto)
            {
                CursoList.Add(nombre);
            }
            return CursoList;
        }

        public Curso getCursoActualbyIdCurso(int idCurso)
        {
            Curso curso = new SanFranciscoModel.Curso.Curso();
            CursoDataContext db = new CursoDataContext();

            var objeto = from nombrecurso in db.Cursos
                         select nombrecurso;
            foreach (var nombre in objeto)
            {
                curso = nombre;
            }
            return curso;
        }

        //Metodo para devolver una lista de cursos año actual
        public List<Curso> getCursoActual()
        {
            List<Curso> CursoList = new List<Curso>();
            CursoDataContext db = new CursoDataContext();
            DateTime year = DateTime.Now;

            var objeto = from nombrecurso in db.Cursos
                         select nombrecurso;
            foreach (var curso in objeto)
            {
                if (curso.Año == year.Year)
                CursoList.Add(curso);
            }
            return CursoList;
        }

        //Metodo para devolver una lista de cursos año actual
        public int getNewIdCurso()
        {
            List<Curso> CursoList = new List<Curso>();
            CursoDataContext db = new CursoDataContext();
            DateTime year = DateTime.Now;
            int ultimo = 0;

            var objeto = from nombrecurso in db.Cursos
                         select nombrecurso;
            foreach (var curso in objeto)
            {
                if (curso.Año == year.Year)
                    ultimo = curso.idCurso + 1;
            }
            return ultimo;
        }


        //Trae el Curso para el año actual segun un idCurso
        public Curso getCursoActualbyDNI(int DNI)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();
            List<AlumnoXCurso> ListAlumnoXCurso = new List<AlumnoXCurso>();

            ListAlumnoXCurso = getCursoAlumnoXCuursobyDNI(DNI);

            DateTime year = DateTime.Now;
            foreach(AlumnoXCurso AlumnoXCurso in ListAlumnoXCurso)
                {
                    var objeto = from nombrecurso in db.Cursos
                                 where nombrecurso.idCurso == AlumnoXCurso.idCurso
                                 select nombrecurso;
                    foreach (var curso in objeto)
                    {
                        if (curso.Año == year.Year)
                        Curso = curso;
                    }
                }
            return Curso;
        }

        public Curso getCursobyDNIAlumno(int idCurso)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();

                var objeto = from nombrecurso in db.Cursos
                             where nombrecurso.idCurso == idCurso
                             select nombrecurso;
                foreach (var curso in objeto)
                {
                    Curso = curso;
                }
            return Curso;
        }


        public Curso getCursoActualbyId(int Id)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();

            DateTime year = DateTime.Now;
           
                var objeto = from nombrecurso in db.Cursos
                             where nombrecurso.idCurso == Id
                             select nombrecurso;
                foreach (var curso in objeto)
                {
                    if (curso.Año == year.Year)
                        Curso = curso;
                }
            return Curso;
        }

        //Si el alumno esta inscripto actualmente en un curso (este año) devuelve true
        public bool ExisteAlumnoEnCursoActual(int DNI)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();
            List<AlumnoXCurso> ListAlumnoXCurso = new List<AlumnoXCurso>();

            ListAlumnoXCurso = getCursoAlumnoXCuursobyDNI(DNI);

            DateTime year = DateTime.Now;
            foreach (AlumnoXCurso AlumnoXCurso in ListAlumnoXCurso)
            {
                var objeto = from nombrecurso in db.Cursos
                             where nombrecurso.idCurso == AlumnoXCurso.idCurso
                             select nombrecurso;
                foreach (var curso in objeto)
                {
                    if (curso.Año == year.Year)
                        Curso = curso;
                }
            }

            if (Curso.idCurso > 0)
                return true;

            return false;
        }

        //Trae el Curso para el año actual segun un idCurso
        public List<AlumnoXCurso> getCursoAlumnoXCuursobyDNI(int DNI)
        {
            List<AlumnoXCurso> ListAlumnoXCurso = new List<AlumnoXCurso>();
            AlumnoXCursoDataContext db = new AlumnoXCursoDataContext();

            var objeto = from nombrecurso in db.AlumnoXCursos
                         select nombrecurso;
            foreach (var curso in objeto)
            {
                if (curso.DNIAlumno == DNI)
                    ListAlumnoXCurso.Add(curso);
            }
            return ListAlumnoXCurso;
        }

        public bool ExisteCurso(int Id, int año)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();

            var objeto = from curso in db.Cursos
                         where curso.idCurso == Id
                         select curso;

            foreach (var cur in objeto)
            {
                Curso = cur;
            }

            if (Curso.idCurso == Id && Curso.Año==año)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void guardarCurso(Curso curso)
        {
            CursoDataContext db = new CursoDataContext();

            try
            {
                db.Cursos.InsertOnSubmit(curso);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
            }
        }

        public void modificarCurso(Curso curso)
        {
            CursoDataContext db = new CursoDataContext();

            var objeto = from alum in db.Cursos
                         where curso.idCurso == curso.idCurso
                         select alum;

            foreach (var al in objeto)
            {
                if (al.idCurso == curso.idCurso)
                {
                    al.idCurso = curso.idCurso;
                    al.NombreCurso = curso.NombreCurso;
                    al.Conducta = curso.Conducta;
                    al.Año = curso.Año;
                }
            }

            try
            {
                db.SubmitChanges();
            }
            catch
            {
            }
        }


        public List<Curso> getCursoActualByDNIDocente(int _DNIDocente)
        {
            List<Curso> CursoList = new List<Curso>();
            CursoDataContext db = new CursoDataContext();

            List<CursoXMateriaXDocenteDataContext> CursoXMateriaXDocenteDataContextList = new List<CursoXMateriaXDocenteDataContext>();
            CursoXMateriaXDocenteDataContext db2 = new CursoXMateriaXDocenteDataContext();

            DateTime year = DateTime.Now;

            var objeto = from nombrecurso in db2.CursoXMateriaXDocentes
                         where nombrecurso.IdDocente == _DNIDocente
                         select nombrecurso;
            foreach (var curso in objeto)
            {
                var objeto2 = from x in db.Cursos
                             where x.idCurso == curso.IdCurso
                             select x;


                foreach (var x in objeto2)
                {
                    if (x.Año == year.Year)
                        CursoList.Add(x);
                }
            }

            return CursoList;
        }

        public static bool ExisteNombreCurso(string nombre)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();

            var objeto = from curso in db.Cursos
                         where curso.NombreCurso == nombre
                         select curso;

            foreach (var cur in objeto)
            {
                Curso = cur;
            }

            if (Curso.NombreCurso == nombre)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static Curso getCursobyNombre(string nombre)
        {
            Curso Curso = new Curso();
            CursoDataContext db = new CursoDataContext();

            var objeto = from curso in db.Cursos
                         where curso.NombreCurso == nombre
                         select curso;

            foreach (var cur in objeto)
            {
                Curso = cur;
            }

            return Curso;
        }
    }
}
